package huanzhao.erp.domain.annotation;

import huanzhao.erp.domain.types.StaffType;
import huanzhao.erp.other.validator.StaffAssignableValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;


/**
 * 检查员工是否能被分配任务
 * 可以指定员工类型，包括采购、仓管、维修、质检
 * <p>
 * 以下情况时，员工不能被分配任务：
 * 1. 员工不存在
 * 2. 员工休假、离职
 * 3. 员工不是指定类型的员工
 * <p>
 * 当StaffId为null时，通过校验
 *
 * @author April
 * 2024/10/8 19:45
 * @version 1.0
 */
@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = StaffAssignableValidator.class)
@Documented
public @interface CheckAssignable {
    String message() default "员工不存在";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 员工类型
     *
     * @return StaffType
     * 2024/10/9 17:11:36
     */
    StaffType value() default StaffType.NONE;
}
